Large-scale services allow transactions across vast volumes of data and often maintain multiple replicas of data. The underlying resources have finite limits that restrict the amount of data that can be handled in any single transaction. As a result, large-scale services are typically designed with fixed scale units. When the load on a service exceeds the scale unit, additional scale units may be added and the data may be partitioned across multiple scale units. While this allows the service to accommodate increasing volumes of data, transactions can longer be performed across the data that has been partitioned.
Often the same data is replicated to more than one partition, for example, to allow that data to be viewed in different ways (e.g., by first name or by last name). Depending upon the design of the synchronization mechanisms used to reconcile the data, the changes may take some time to replicate to other partitions. This presents a particular problem in an eventually consistent large-scale service when a user edits data in one partition, saves the edited data, and receives confirmation that the data has been saved. While the data in each partition will eventually reflect the user's changes (i.e., eventual consistency), propagation delays present an undesirable situation where the changes may not appear to be present if the user subsequently pulls data from a replica before the partition has been updated with the changes. The apparent loss of the changes can be quite disconcerting to a user after receiving confirmation that the changes had been saved.
Conventional solutions to this problem include using load balancing schemes that direct the user to the same partition; however, load balancing becomes difficult when the partition experiences an outage or when partition roles require the user to access replicas on different partitions, which leads to load balancing becoming a scalability bottleneck.
It is with respect to these and other considerations that the present invention has been made. Although relatively specific problems have been discussed, it should be understood that the embodiments disclosed herein should not be limited to solving the specific problems identified in the background.